草庐IT

C++ std::unordered_map 复杂度

全部标签

c++ - std::multimap::equal_range 的时间复杂度

下午好,我想知道std::multimap::equal_range的时间复杂度是多少?它是Big-O(n)还是BIG-0(logn)。我记得读过std::multimap::erase的时间复杂度“是被删除序列长度的对数加上线性时间。”http://frank.mtsu.edu/~csjudy/STL/Multimap.html> 最佳答案 C++03标准,23.1.2中的表69(“关联容器要求”)表示equal_range具有对数复杂度。 关于c++-std::multimap::e

c++ - 如何手动将数据放入 boost::asio::streambuf 以便稍后使用 std::istream 读取它?

我正在尝试使用std::istream作为数据源。我想将自定义二进制数据放置到istream的流缓冲区中,以便稍后可以从istream中检索它。我已经阅读了有关boost::asio::streambuf的内容,以及如何使用它来完成我想要的,但使用套接字作为数据源而不是我想使用的内存缓冲区。据我了解documentation,步骤应该是:创建一个boost::asio::streambuf创建一个传递streambuf的std::istream调用boost::asio::streambuf::prepare以获取表示输出序列的缓冲区列表。以某种方式写入输出序列。调用boost::as

c++ - 无缓冲 std streambuf 实现

为了对序列化库进行一些快速测试,我想创建一个可以读取/写入套接字的streambuf。我不想在streambuf中使用缓冲区,而是让套接字处理它。我确信序列化库只会调用std::istream::read和std::ostream::write。快速浏览一下Microsoft的basic_streambuf实现就会发现,这些调用实际上直接转发到xsputn和xsgetn。问题是:我能否从streambuf派生并仅实现xsputn和xsgetn,并确保使用我的实现的流将始终调用这些方法,而不是同步/溢出/下溢/pback/...?或者我应该覆盖同步等以返回错误,还是标准保证默认实现是好的

c++ - boost::unordered_map -- 需要指定自定义哈希函数来散列 std::set<int> 吗?

我想使用boost::unordered_map,其中key是std::set.由于一组整数不是内置类型,我假设我必须提供我自己的散列函数(或者,更确切地说,我正在考虑使用boost'shash_range)。但是,现在我尝试像这样初始化散列映射,既不提供散列函数也不提供相等谓词——而且gcc没有提示。这里发生了什么?boost是否足够聪明,可以自行散列所有STL容器?这会比我使用自定义哈希函数慢吗?使用boost::hash_range怎么样??提前致谢。 最佳答案 根据theBoostdocumentation:thedefau

c++ - unordered_map 如何导致 sigsegv

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。编辑:已解决,我知道怎么做,但我不明白为什么。我改变了variables来自的声明tr1::unordered_mapvariables;到unordered_mapvariables;它工作正常。如果您知道原因,请将其写在答案中。我有一个非常大的程序,所以我不知道应该把哪个代码放在这里。有抽象类,继承派生类。摘要有unordered_map(模板)作为私有(private)成员和公共(publ

c++ - C++中保存复杂对象的方法

我一直都是通过将ASCII码写入文件来保存数据的,也就是param1=value1param2=stringstringstring并加载了烦人的解析开销。我只是试图通过将整个对象写入二进制文件来提升我的编程游戏,alaclassRecord{intpar1;stringpar2;vectorpar3;voidsaveRecord(stringfName);voidloadRecord(stringfName);}Record::saveRecord(){...fstreamoutFile(fName.c_str(),fstream::out|fstream::binary);outF

c++ - ctypes python std::字符串

我正在使用C++作为后端使用ctypes。现在在C++中有这样一个函数:voidHandleString(std::stringsomething){...}我想知道如何从python调用这个函数-没有ctype(c_char_p显然不会工作)来向这个函数发送一个字符串参数......我怎样才能解决这个问题并将一个字符串从Python传递到C++(并将参数更改为char*一些不是和选项)PS我可以创建这样的解决方法吗?将python字符串作为c_char_p发送到将char*转换为std::string的C++函数以某种方式返回字符串或其指针???!!(如何?)到python将它从py

c++ - unordered_set 将元素存储为指针

缩小范围:我目前正在使用Boost.Unordered.我看到两种可能的解决方案:定义我自己的EqualityPredicatesandHashFunctions并利用模板(可能是is_pointer)来区分指针和实例;简单地扩展boost::hash通过提供hash_value(Type*const&x)至于散列;并添加==运算符重载为自由函数(Type*const&x,Type*const&y)用于相等检查的参数。我不确定这两种变体是否真的可行,因为我没有测试它们。我想知道你处理这个问题。欢迎实现:)编辑1:这个呢?templatestructEquals:std::binary_

c++ - MacOS 的 "-std=gnu++0x"选项

我正在尝试编译一个使用的CMake项目set(CMAKE_CXX_FLAGS${CMAKE_CXX_FLAGS}"-Wall-std=gnu++0x")在MacOSXLion下的CMakeLists.txt文件中。我已经安装了XCode4.2.1。但是编译器失败了:cdsomething/src/lib&&/usr/bin/c++-Dlib_ginacra_EXPORTS-Wall-std=gnu++0x-fPIC-oCMakeFiles/lib_ginacra.dir/utilities.cpp.o-csomething/src/lib/utilities.cppcc1plus:er

C++ map<K,T> 初始化

我正在阅读“IvorHorton的BeginningProgrammingVisualC++2010”,我正在阅读第10章-标准模板库。我的问题是map容器mapmapname.这本书向我展示了很多向其中添加元素的方法,例如pair并使用make_pair()功能稍后,和mapname.insert(pair).但是突然他引入了一个添加元素的技巧,用在下面的代码中:intmain(){std::mapwordscoutbegin(cin);std::istream_iteratorend;while(being!=end)//iterateoverwordsinthestream//P